import pandas as pd
from sklearn.linear_model import LogisticRegression
import warnings
warnings.filterwarnings('ignore')
#header=None:不把第一行当做列标签
df = pd.read_csv('breast-cancer-wisconsin.data',header=None)
print(df.head())
print(df.info())
print(df.describe())
#发现第一列是id列 无任何意义
print(df[0].value_counts())
del df[0]
#发现第六列有？，使用众数1替换
print(df[6].value_counts())
#inplace=True；原始数据能够被修改
df[6].replace('?',1,inplace=True)
#将标签列的数据转化为0和1
print(df[10])
df[10]=df[10].map({2:0,4:1})

print(df[10].value_counts())
#随机抽取217个正类别数据，生成新数据df1
df1=df[df[10]==1].sample(n=217)
#将df1，拼接到原始数据中，作为新的数据集
df=pd.concat([df,df1])
print(df[10].value_counts())

#切分x,y
x=df.iloc[:,:-1]
y=df.iloc[:,-1:]

lr=LogisticRegression()
gr={'C':[0.1,0.2,0.5,1]}
# 使用l2正则化，找0.1,0.2,0.5,1的最优参数#
from sklearn.model_selection import GridSearchCV
gri=GridSearchCV(lr,gr,cv=10)
gri.fit(x,y)
print(gri.best_score_)
print(gri.best_params_)
# 使用最优参数重新创建模型，预测结果
lr=LogisticRegression(C=0.1)
lr.fit(x,y)
h=lr.predict(x)
from sklearn.metrics import accuracy_score,confusion_matrix,classification_report
from sklearn.metrics import roc_auc_score,roc_curve
import matplotlib.pyplot as plt
# 打印acc   混淆矩阵，分类报告
print(confusion_matrix(y,h))
print(classification_report(y,h))
print(accuracy_score(y,h))
#roc，auc数值
#计算预测值  概率
h_=lr.predict_proba(x)
#切出正类别概率
h__=h_[:,1]
print(h__)
#获得fpr，tpr
fpr,tpr,th=roc_curve(y,h__)
# 画图
plt.plot(fpr,tpr)
plt.show()
#auc值
print(roc_auc_score(y,h__))